package tool;

import java.util.concurrent.Semaphore;

public class SemaphoreTool {
    //比果一个停车厂的停车位是有限的，那么当车位停满之后，其它的车(线程)是不能进来的。只有等有人离开之后才能进来.
    // Semaphore类是Java中用于实现信号量的类。

    public static void main(String[] args) {
        //创建Semaphore对象
        //创建三个车位
        Semaphore semaphore = new Semaphore(10);

        Runnable r = () -> {
            try {
                //获取车位
                semaphore.acquire();//当获取车位失败，会阻塞当前线程，知道获取车位成功
                System.out.println(Thread.currentThread().getName() + "抢到车位");
                //模拟停车
                Thread.sleep(1000);
                //离开车位
                System.out.println(Thread.currentThread().getName() + "离开车位");
                semaphore.release();//释放车位
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        };
        for (int i = 1; i <= 100; i++) {
            new Thread(r, "第" + i + "号").start();
        }

    }
}
